假設情況是要預測一張新的圖片,數字是多少,我們從圖片所在的路徑去取出該圖片
def predict_image_with_path(file_path):
im = Image.open(file_path)
通常照相的圖片是RGB彩圖,我們要轉換成灰階圖,因為訓練模型時用得是灰階圖
im = im.convert('L')
將圖片大小縮成28x28,會有圖片變扁或變長的問題,但我們為了簡化理解,先忽視這類的問題
ANTIALIAS是反鋸齒(平滑化)
im = im.resize((28, 28), Image.ANTIALIAS) # resize the image
機器學習使用Numpy的陣列
im = np.array(im)
跟之前圖片預處理一樣,將值變成0~1的分佈
im2 = im / np.max(im).astype(float) # normalise input
這些是繪圖,方便我們看看得到了什麼樣的圖
plt.imshow(im2, cmap='gray')
plt.title('My Image')
plt.axis('off')
plt.show()
轉換成當時架構網路時一樣的input shape
model.predict(test_image)會得出類似這樣的結果: [0.05, 0.4, 0, 0, 0, 0, 0, 0.55, 0, 0, 0]
model.predict(test_image).argmax(axis=1)會把返回最大的值在第幾個:7,也就是預測數字7
test_image = np.reshape(im2, [1, 1, 28, 28]) # reshape it to our input placeholder shape
predict = model.predict(test_image).argmax(axis=1)
return test_image, predict
總結:將新資料改成符合當初訓練模型時用的資料格式
例如灰階圖(channel=1)、尺寸(28x28)、正規化(值從0~255變成0~1)、輸入input placeholder shape